package model;

import java.util.List;

import view.AvailabilityCell;

/**
 * The interface for all Users that will be operating
 * this program. Houses the skeletal behavior and 
 * public interface that all users must conform to.
 * 
 * @author Tristan D. Boucher
 * @version Commit #22 9/14/2013
 */
public interface UserInterface 
{
  
  /**
   * Returns true if this user is a tutor. False if not.
   * 
   * @return my_is_tutor See above.
   */
  boolean isTutor();
  
  /**
   * Returns true if this user is an administrator. False if not.
   * 
   * @return my_is_administrator See above.
   */
  boolean isAdministrator();
  
  /**
   * All users must have classes they can tutor. If empty,
   * they will simply be left out of the tutor scheduling
   * algorithm.
   * 
   * @return The list of classes that that user can tutor.
   */
  List<Classes> getClasses();
  
  /**
   * All users have time slots that they can work in laid out
   * in a 2 dimensional array network. Each day has a corresponding
   * number for identification through the enumeration. This 2
   * dimensional array will be an array whose indexed locations 
   * corresponding to each individual day will house a List of
   * TimeSlot objects which define what hours that user is available
   * for work.
   * This will return an array of length 7 where each component of the 
   * array is comprised of Lists containing all those time slots that the
   * current user is able to work.
   * 
   * @return The list of timeslots that this user can work.
   */
  List<TimeSlot[]> getTimeSlots();

  /**
   * Returns the password comparison for this user.
   * 
   * @param the_password The password to be compared.
   * @return Is the password correct?
   */
  boolean isCorrectPassword(final String the_password);

  /**
   * This will add the availability from the gui to the user.
   * Needs hours available, the classes they can tutor, and
   * their min and max hour situation.
   * 
   * @param the_availability_cells The 2d array of availability
   * @param the_classes The array of classes that the users can tutor.
   * @param the_min_max_hours The array of minimum and maximum hours
   * this user can work.
   */
  void addAvailability(AvailabilityCell[][] the_availability_cells, Classes[] the_classes,
                       int[] the_min_max_hours);
}
